#include "matrix.h"

int newMatrix(Matrix *A,int x, int y, int z)
{
    A->x=x;
    A->y=y;
    A->z=z;
    A->m_Elementos =NULL;
    A->m_Elementos = (double***) malloc(A->x*sizeof(double***));
    for (x=0; x<A->x; x++)
    {
        A->m_Elementos[x] = (double**) malloc(A->y*sizeof(double**));
        for (y=0;y<A->y; y++)
        {
            A->m_Elementos[x][y] = (double*) malloc(A->z*sizeof(double*));
           // for (z=0; z<A->z; z++)
            {
             //   A->m_Elementos[x][y][z] =(double&) malloc(sizeof(double*));
            }
        }
    }
    return 0;
   //ctor
}
int printMatrix(Matrix A)
{
    int i,j ,k;
    if(A.x==0)
    {
        printf("matriz vazia\n");
        return 0;
    }
    for(i=0; i<A.x;i++)
    {
        for(j=0; j<A.y;j++)
        {
            for(k=0; k<A.z;k++)
            {
                printf("%2.2lf ",A.m_Elementos[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }
return 0;
}

int fillMatrix (FILE *IN,Matrix *A)
{
    int i,j,k;

    for(i=0; i<A->x;i++)
    {
        for(j=0; j<A->y;j++)
        {
            for(k=0; k<A->z;k++)
            {
                fscanf(IN,"%lf",&A->m_Elementos[i][j][k]);
            }
        }
    }
    return 0;
}

int MatrixAdd (Matrix *A,Matrix B)
{
    int i,j,k;
    for(i=0; i<A->x;i++)
    {
        for(j=0; j<A->y;j++)
        {
            for(k=0; k<A->z;k++)
            {
               A->m_Elementos[i][j][k]=A->m_Elementos[i][j][k]+B.m_Elementos[i][j][k];
            }
        }
    }
    return (0);
}


int DeleteMatrix (Matrix *A)
{
    int i,j;
    double *q;

    for(i=0;i<A->x;i++)
    {
    	for(j=0;j<A->y;j++)
    	{
     	    if(A->m_Elementos[i][j])
    		free(A->m_Elementos[i][j]);

    		//A->m_Elementos[i][j]=NULL;
    	}
    	if(A->m_Elementos[i])
    	free(A->m_Elementos[i]);

    	//A->m_Elementos[i]=NULL;
    }
    if(A->m_Elementos)
    free(A->m_Elementos);
    //A->m_Elementos=NULL;
  /*  for(i=0; i<A->x;i++)
    {
        for(j=0; j<A->x;j++)
        {
            for(k=0; k<A->;k++)
            {
                free((double*)A->m_Elementos[i][j]);
            }
            free((double*)A->m_Elementos[i]);
        }
        free(A->m_Elementos);
    }*/
    A->x=0;
    A->y=0;
    A->z=0;
    return 0;
}
